You can include literal examples that should not be subjected to markup. Such examples will be typeset in monospace, so this is well suited for source code and similar examples.
#+BEGIN_EXAMPLE
Some example from a text file.
#+END_EXAMPLE
Note that such blocks may be indented in order to align nicely with indented text and in particular with plain list structure (see Plain lists). For simplicity when using small examples, you can also start the example lines with a colon followed by a space. There may also be additional whitespace before the colon:
Here is an example
: Some example from a text file.
If the example is source code from a programming language, or any other text that can be marked up by font-lock in Emacs, you can ask for the example to look like the fontified Emacs buffer1. This is done with the ‘src’ block, where you also need to specify the name of the major mode that should be used to fontify the example:
#+BEGIN_SRC emacs-lisp
(defun org-xor (a b)
"Exclusive or."
(if a (not b) b))
#+END_SRC
Both in example and in src snippets,
you can add a -n switch to the end of the
BEGIN line, to get the lines of the example
numbered. If you use a +n switch, the numbering from
the previous numbered snippet will be continued in the current
one. In literal examples, Org will interpret strings like
‘(ref:name)’
as labels, and use them as targets for special hyperlinks like
[[(name)]] (i.e. the reference name enclosed in
single parenthesis). In HTML, hovering the mouse over such a link
will remote-highlight the corresponding code line, which is kind
of cool.
You can also add a -r switch which removes
the labels from the source code2. With the
-n switch, links to these references will be labeled
by the line numbers from the code listing, otherwise links will
use the labels with no parentheses. Here is an example:
#+BEGIN_SRC emacs-lisp -n -r
(save-excursion (ref:sc)
(goto-char (point-min)) (ref:jump)
#+END_SRC
In line [[(sc)]] we remember the current position. [[(jump)][Line (jump)]]
jumps to point-min.
If the
syntax for the label format conflicts with the language syntax,
use a -l switch to change the format, for example
‘#+BEGIN_SRC pascal -n -r -l
"((%s))"’. See also the variable
org-coderef-label-format.
HTML export also allows examples to be published as text areas, See Text areas in HTML export.
artist-mode4 to allow
creating ASCII drawings easily. Using this command in an empty
line will create a new fixed-width region. org-store-link while editing a source
code example in a temporary buffer created with C-c
' will prompt for a label. Make sure that it is unique in
the current buffer, and insert it with the proper formatting
like ‘(ref:label)’ at the end of the
current line. Then the label is stored as a link
‘(label)’,
for retrieval with C-c C-l.[1] This works automatically for the HTML
backend (it requires version 1.34 of the htmlize.el package, which is distributed
with Org). Fontified code chunks in LaTeX can be achieved using
either the listings or the minted package. To use
listings, turn on the variable
org-export-latex-listings and ensure that the
listings package is included by the LaTeX header (e.g. by
configuring org-export-latex-packages-alist). See
the listings documentation for configuration options, including
obtaining colored output. For minted it is necessary to install
the program pygments, in
addition to setting org-export-latex-minted,
ensuring that the minted package is included by the LaTeX
header, and ensuring that the -shell-escape option
is passed to pdflatex
(see org-latex-to-pdf-process). See the
documentation of the variables
org-export-latex-listings and
org-export-latex-minted for further details.
[2] Adding -k to -n
-r will keep the labels in the source code while
using line numbers for the links, which might be useful to
explain those in an org-mode example code.
[3] Upon exit, lines starting with ‘*’ or ‘#’ will get a comma prepended, to keep them from being interpreted by Org as outline nodes or special comments. These commas will be stripped for editing with C-c ', and also for export.
[4] You may select a different-mode with the
variable org-edit-fixed-width-region-mode.